const express = require("express");
const router = express.Router();
const usertable = require("../../database/userinfo")
const msgtable = require("../../database/messageData")
// 判断用户是否登录
router.use((req, res, next) => {
    if (!req.session.userInfo) {
        return res.send({
            code: 7,
            message: "未登录，不能修改个人信息"
        })
    }
    next();
});

//发送评论数据
router.post("/sendMsg", async (req, res) => {
    let { msgVal } = req.body;
    if (!msgVal.trim() || msgVal.length > 100) {
        return res.send({
            code: 1,
            message: "内容格式不正确"
        })
    }
    await msgtable.create({
        content: msgVal,
        author: req.session.userInfo._id //发表这条评论作者的id
    })
    res.send({
        code: 0,
        message: "评论发表成功"
    })

});


// 未登录会被拦截，把他分出去

// // 获取评论数据
// router.get("/getMsgData", async (req, res) => {
//     let msgData = await msgtable
//         .find({}, {}, { sort: { date: -1 } })
//         .populate("author", { password: 0, __v: 0, admin: 0 })
//         .populate("children.author", { password: 0, __v: 0, admin: 0 })//同时查询写子级回复的用户信息
//         .populate("children.replyId", { password: 0, __v: 0, admin: 0 }); //查询子级回复里存储的父级评论的用户信息
//     res.send({
//         code: 0,
//         message: "获取成功",
//         data: msgData,
//     })
// })


//点赞评论
router.post("/comment/likes", async (req, res) => {
    let { id } = req.body;

    //判断id存不存在
    if (!id) {
        return res.send({
            code: 1,
            message: "你没发评论的id过来"
        });
    };

    //判断当前评论是否存在
    let data = await msgtable.findById(id)
    if (!data) {
        return res.send({
            code: 1,
            message: "你发过来的评论id在数据库中查找不到"
        });
    }

    let userId = req.session.userInfo._id; //点赞用户id

    // 判断用户是否点过赞
    if (data.likes.includes(userId)) {
        //存在，点过赞了，要取消赞
        await msgtable.findByIdAndUpdate(id, { $pull: { likes: userId } }); //在数组中删除该用户id
    } else {
        //没点过赞，要点赞
        await msgtable.findByIdAndUpdate(id, { $push: { likes: userId } }); //在数组中删除该用户id
    }
    res.send({
        code: 0,
        message: "成功"
    })
})

// 回复评论
router.post("/comment/reply", async (req, res) => {
    let { id, content, replyId } = req.body
    //判断数据格式：数据是否为空 / 数据长度是否超过100
    if (!content) return res.send({ code: 1, message: "回复的内容为空" });
    if (content.length > 100) return res.send({ code: 2, message: "回复的内容超过100了" });

    // 判断当前这条父评论是否存在    
    let doc1 = await msgtable.findById(id)
    if (!doc1) return res.send({ code: 1, message: "评论id错误" });

    //父级评论的作者是否存在
    let doc2 = await usertable.findById(replyId);
    if (!doc2) return res.send({ code: 3, message: "你要回复的用户的id错误，用户不存在" });

    await msgtable.findByIdAndUpdate(id, {
        //往这条父评论下的children数组中添加回复数据
        $push: {
            children: {
                content,
                author: req.session.userInfo._id,  //写回复的用户id。这条回复是谁写的
                replyId  //回复的父级评论的用户id，被回复的那个人
            }
        }
    });
    res.send({ code: 0, message: "回复成功" });
})

//子集评论点赞
router.post("/like/replay", async (req, res) => {
    let { parentId, childId, childIndex } = req.body;
    let parentDoc = await msgtable.findById(parentId);//父文档
    let childDoc = await parentDoc.children.id(childId);//子文档。当前点赞的子级回复数据
    // console.log(child);

    //父级评论的id是否存在
    if (!parentDoc) return res.send({ code: 1, message: "父级评论的id不存在，没有这条父评论" });
    //子级评论的id是否存在
    if (!childDoc) return res.send({ code: 1, message: "子级评论的id不存在，没有这条子回复" });


    let userId = req.session.userInfo._id;

    if (childDoc.likes.includes(userId)) {
        //存在，点过赞了，要取消赞
        await msgtable.findByIdAndUpdate(parentId, {
            $pull: {
                [`children.${childIndex}.likes`]: userId
            }
        }); //在数组中删除该用户id
    } else {
        //没点过赞，要点赞
        await msgtable.findByIdAndUpdate(parentId, {
            $push: {
                [`children.${childIndex}.likes`]: userId
            }
        }); //在数组中删除该用户id
    }
    res.send({
        code: 0,
        message: "点赞/取消点赞的操作已经完成"
    })

})


module.exports = router;